package com.slkj.shilixiaoyuanapp.util;

import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;

import java.util.ArrayList;
import java.util.List;

public class KeyWordUtil {
    /**
     * 关键字高亮变色
     *
     * @param color   变化的色值
     * @param text    文字
     * @param keyword 文字中的关键字
     * @return
     */
    public static SpannableString matcherSearchTitle(int color, String text,
                                                     String keyword) {
        if (text == null)
            return null;
        SpannableString ss = new SpannableString(text);
        int spanStart;
        int spanEnd;
        if (keyword != null && text.contains(keyword)) {
            spanStart = text.indexOf(keyword);
            spanEnd = spanStart + keyword.length();
            ss.setSpan(new ForegroundColorSpan(color), spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return ss;
    }

    /**
     * 多个关键字高亮变色
     *
     * @param color   变化的色值
     * @param text    文字
     * @param keyword 文字中的关键字数组
     * @return
     */
    public static SpannableString matcherSearchTitle(int color, String text,
                                                     String[] keyword) {
        if (text == null)
            return null;

//        SpannableString s = new SpannableString(text);
//        for (int i = 0; i < keyword.length; i++) {
//            Pattern p = Pattern.compile(keyword[i]);
//            Matcher m = p.matcher(s);
//            while (m.find()) {
//                int start = m.start();
//                int end = m.end();
//                s.setSpan(new ForegroundColorSpan(color), start, end,
//                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//            }
//        }

        SpannableString ss = new SpannableString(text);
        for (int i = 0; i < keyword.length; i++) {
            int spanStart;
            int spanEnd;
            if (keyword != null && text.contains(keyword[i])) {
                spanStart = text.indexOf(keyword[i]);
                spanEnd = spanStart + keyword[i].length();
                ss.setSpan(new ForegroundColorSpan(color), spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
        return ss;
    }

    /**
     * 多个关键字高亮变色,直接传收尾编号改变颜色
     *
     * @param color 变化的色值
     * @param text  文字
     * @return
     */
    public static SpannableString matcherSearchTitle(int color, String text, int start, int end) {
        if (text == null)
            return null;

        SpannableString ss = new SpannableString(text);
        ss.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return ss;
    }

    /**
     * 多个关键字高亮变色
     *
     * @param color         变化的色值
     * @param text          文字
     * @param keywordList   文字中的关键字list
     * @param caseSensitive 区分大小写
     * @return
     */
    public static SpannableString matcherSearchTitle(int color, String text,
                                                     List<String> keywordList, boolean caseSensitive) {
        List<String> list = new ArrayList<>();
        if (caseSensitive) {
            for (int i = 0; i < keywordList.size(); i++) {
                list.add(keywordList.get(i));
            }
        } else {
            for (int i = 0; i < keywordList.size(); i++) {
                list.add(keywordList.get(i).toLowerCase());
                list.add(keywordList.get(i).toUpperCase());
            }
        }

        String[] tmp = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            tmp[i] = list.get(i);
        }
        return matcherSearchTitle(color, text, tmp);
    }

    /**
     * 多个关键字高亮变色
     *
     * @param color       变化的色值
     * @param text        文字
     * @param keywordList 文字中的关键字list
     * @return
     */
    public static SpannableString matcherSearchTitle(int color, String text,
                                                     List<String> keywordList) {

        return matcherSearchTitle(color, text, keywordList, true);
    }
}
